﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Leetcode_Array.Script.StackAndQueue
{
    // =================================力扣150 逆波兰表达式（后缀表达式）
    //逆波兰表达法也叫后缀表达法，也就是将运算符写在操作数之后
    //根据逆波兰表示法，求表达式的值
    //有效运算法包括 +,-.*./
    //每个运算对象可以是整数，也可以是另一个逆波兰表达式。
    class PostifixExpression
    {
        public int EvalRPN(string[] tokens)
        {
            Stack<int> st = new Stack<int>();
            for(int i = 0;i < tokens.Length;i++)
            {
                if(tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "*" || tokens[i] == "/")
                {
                    int num1 = st.Pop();
                    int num2 = st.Pop();
                    if (tokens[i] == "+")
                        st.Push(num2 + num1);
                    else if (tokens[i] == "-")
                        st.Push(num2 - num1);
                    else if (tokens[i] == "*")
                        st.Push(num2 * num1);
                    else
                        st.Push(num2 / num1);
                }
                else
                {
                    
                    st.Push(int.Parse(tokens[i]));
                }
            }
            return st.Pop();
        }
    }
}
